#include<iostream>
using namespace std;

class Person
{
public:
    // 构造函数的分类：
    // 1.按参数进行构造：有参构造和无参构造
    // 2.按类型进行构造：拷贝构造
    Person()
    {
        cout << "Pesson()的构造函数" << endl;
    }

    Person(int a)
    {
        age = a;
        cout << "Pesson()的有参构造函数" << endl;
    }

    Person(const Person &p)
    {
        // 将传入对象身上的所以属性传入到我的身上
        age = p.age;
        cout << "Person的拷贝构造函数" << endl;
    }

    ~Person()
    {
        cout << "Person()的析构函数" << endl;
    }

    int age;
};

void test01()
{
    // 使用一个已经初始化完毕的对象创建一个新对象
    Person p1(10);
    Person p2(p1);
}

void dowork(Person p)
{

}

void test02()
{
    // 以值传递的方式给函数参数传值
    Person p;
    dowork(p);
}

Person dowork2()
{
    Person p1;
    cout << &p1 << endl;
    return p1;
}

void test03()
{
    // 值得方式返回局部对象
    Person p2 = dowork2();
    cout << &p2 << endl;
}

int main()
{
    test03();

    return 0;
}

